package com.ophiux.cs.domain.user.model.aggregate;

import java.util.List;

import com.ophiux.cs.domain.core.Aggregate;
import com.ophiux.cs.domain.core.DomainResult;
import com.ophiux.cs.domain.user.model.entity.Patients;
import com.ophiux.utils.common.IDCardUtil;
import com.ophiux.utils.common.StringUtil;
import com.ophiux.utils.exception.OphiuxParamException;

/**
 * 说明：用户  -- 就诊人  聚合类<br>
 * <h1>创 建 人: hehailong<br></h1>
 * 创建日期: 2018年8月31日 上午10:02:31<br>
 * 修改记录：
 */
public class UserPatientInfo extends Aggregate {
	public String USER_ID;
	public List<Patients> patients;
	
	/**
	 * 新增就诊人
	 * @param PATIENT_NAME 就诊人姓名
	 * @param ID_NO	身份证
	 * @param BIRTH_DAY 出生日期
	 * @param SEX	性别
	 * @param PHONE	电话
	 * @param CERTIFICATE_TYPE 证件类型
	 * @param CERTIFICATE_NO	证件号
	 * @param ADDRESS	地址
	 * @param IS_DEFAULT 是否默认就诊人   true默认  false非默认
	 * @return 新增就诊人PATIENT_ID
	 * @throws OphiuxParamException
	 */
	public String addPatient(String PATIENT_NAME,String BIRTH_DAY,String SEX,String PHONE,String CERTIFICATE_TYPE,String CERTIFICATE_NO,String ADDRESS,boolean IS_DEFAULT) throws OphiuxParamException {
		Patients patient = new Patients(USER_ID);
		patient.setPATIENT_NAME(PATIENT_NAME);
		patient.setBIRTH_DAY(BIRTH_DAY);
		patient.setSEX(SEX);
		patient.setPHONE(PHONE);
		patient.setCERTIFICATE_TYPE(CERTIFICATE_TYPE);
		patient.setCERTIFICATE_NO(CERTIFICATE_NO);
		if(Patients.CERTIFICATE_TYPE_1.equals(CERTIFICATE_TYPE)&&!StringUtil.isEmpty(CERTIFICATE_NO)) {//证件类型为身份证
			patient.setAGE(IDCardUtil.getAgeByIdCard(CERTIFICATE_NO));
			patient.setID_NO(CERTIFICATE_NO);
		}
		
		if(IS_DEFAULT) {
			//设置新增就诊人默认就诊人
			patient.defaultPatient();
			for (Patients pati : patients) {
				pati.notDefaultPatient();//设置为非默认就诊人
				pati.update();
			}
		}else {
			patient.notDefaultPatient();
		}
		patient.setADDRESS(ADDRESS);
		patients.add(patient);
		
		return patient.getPATIENT_ID();
	}
	
	/**
	 * 获取就诊人数量
	 * @return
	 */
	public int getPatientCount() {
		if(patients == null) {
			return 0;
		}
		return patients.size();
	}
	
	/**
	 * 获取就诊人是否存在
	 * @return
	 */
	public boolean hasPatients() {
		return getPatientCount() > 0 ? true : false;
	}
	
	@SuppressWarnings("rawtypes")
	public DomainResult deletePatient(String patientId) {
		if(!hasPatients()) {
			return DomainResult.fail("未找到就诊人信息");
		}
		boolean isSuccess = false;
		boolean isDefault = false;
		for (Patients patient : patients) {
			if (patientId.equals(patient.getPATIENT_ID())) {
				//如果是默认就诊人
				if(Patients.IS_DEFAULT_YES.equals(patient.getIS_DEFAULT())) {
					isDefault = true;
				}
				patient.delete();
				isSuccess = true;
				break;
			}
		}
		
		//如果删除用户存在  && 是默认就诊人
		if(isSuccess&&isDefault) {
			for (int i = 0; i < patients.size(); i++) {
				//如果删除的patientId 不是 列表里面patientId 则设置一个默认就诊人
				if (!patientId.equals(patients.get(i).getPATIENT_ID())) {
					patients.get(i).setIS_DEFAULT(Patients.IS_DEFAULT_YES);
					break;
				}
			}
		}
		
		return isSuccess ? DomainResult.success() : DomainResult.fail("未找到就诊人信息");
	}
	
	
	public String getUSER_ID() {
		return USER_ID;
	}
	public void setUSER_ID(String uSER_ID) {
		USER_ID = uSER_ID;
	}
	public List<Patients> getPatients() {
		return patients;
	}
	public void setPatients(List<Patients> patients) {
		this.patients = patients;
	}
	
	
}
